# /v1/user/ 交给index函数去管理 --> 返回get user success
# /v1/user/update 交给user_update函数管理 --> 返回 user update success

from flask import Blueprint, request
from libs.response import generate_response
from model.user import UserManager
from model import db
from sqlalchemy import or_

user_bp = Blueprint('user', __name__, url_prefix='/v1/user')
# Blueprint两个参数（'蓝图名字',蓝图所在位置',url前缀)，注意：url前缀对该蓝图下所有route都起作用
# 第二个参数：__name__'蓝图所在的模块或者包，一般为'__name__'变量

print("This is user")


# "/"即"/v1/student/"
@user_bp.route("/")
def index():
    # print(dir(request))
    age = request.args.get("age")
    print(age)
    # 接受客户端传递过来的username和passwd
    # 如果传递过来username为root，passwd为123456
    # 返回login success，否则提示login failure
    username = request.args.get("username")
    passwd = request.args.get("passwd")
    # if username == 'root' and passwd == "123456":
    #     return generate_response(message="login seccess")
    # else:
    #     return generate_response(message="login failure")

    # form表单数据接收
    hobby = request.form.get("hobby")
    age = request.form.get("age")

    # json格式数据接收
    subject = request.json.get("sub")
    data = request.json.get("data")

    return generate_response(message="get user seccess")
    # return "Get user success"


# "/get"即"/v1/student/get"
@user_bp.route("/update")
def user_update():
    return generate_response(message="update user success")


# 请求和响应  怎么获取到客户端传递给过来的信息？ -- request
# flask     -- request的对象
# args      -- 获取url参数
# json      -- 获取客户端传递的json格式数据
# form      -- 获取客户端传递的表单数据
# path      -- 获取客户端访问的资源路径
# header    -- 获取客户端传递的头部信息

# 统一 -- 标准、规范、易于管理
# 一般需要三个元素：data -- 数据，message -- 状态码的描述，code -- 状态码

############数据的增删改查
# @user_bp.route("/get")
# def get_user():
#

@user_bp.route("/add", methods=['POST'])
def add_user():
    # 通过json来接收数据
    username = request.json.get("username")
    password = request.json.get("password")
    email = request.json.get("email")
    phone = request.json.get("phone")
    role = request.json.get("role")

    # 实例化对象，数据库的一行记录会映射成一个数据模型对象
    # 新增数据库记录，就创建这个对象
    user_info = UserManager(
        username=username,
        password=password,
        email=email,
        phone=phone,
        role=role
    )
    db.session.add(user_info)
    db.session.commit()
    return generate_response(message="add user success")

@user_bp.route("/delete/<int:id>", methods=["DELETE"])
def delete_user(id):
    del_user = UserManager.query.get(id)
    # 能查询到id就删除，因为id是主键，唯一的
    if del_user:
        db.session.delete(del_user)
        db.session.commit()
        return generate_response(message="delete user success")
    else:
        return generate_response(status_code=10001, message="user not found")

@user_bp.route("/modify/<int:id>", methods=["PUT"])
def modify_user(id):
    mod_user = UserManager.query.get(id)
    if mod_user:
        # 通过json来接收数据，注意辨别可以修改什么属性，那就接收客户端传递的属性过来即可
        email = request.json.get("email")
        phone = request.json.get("phone")
        # 修改实例对应的属性
        mod_user.email = email
        mod_user.phone = phone
        db.session.add(mod_user)
        db.session.commit()
        return generate_response(message="modify user success")

@user_bp.route("/get")
def get_user():
    # 通过args来接受参数 id
    # id为具体的某个值，查询相关用户的详细信息  /v1/user/get?id=5
    # 没有传递id，就返回所有用户的信息  /v1/user/get
    id = request.args.get("id")
    result_list = []
    if id is not None:
        user_info = UserManager.query.get(id)
        result_list.append(user_info)
        # 数据序列化
        return generate_response(message="get user success", data=[dict(user_info)])
    else:
        users_info = UserManager.query.all()
        result_list += users_info
        return generate_response(message="get user success", data=[dict(user) for user in result_list])
    # email = request.args.get("email")

@user_bp.route("/search")
def search():
    user_list = []
    keyword = request.args.get("keyword")
    if keyword is not None:
        users_info = UserManager.query.filter(or_(UserManager.username.like('%'+keyword+'%'), UserManager.email.like('%'+keyword+'%'))).all()
        # print(user_info)  # [<UserManager 4>]
    else:
        users_info = UserManager.query.all()

    for user in users_info:
        user.CreateAt = user.CreateAt.strftime('%Y-%m-%d %H:%M:%S')
        user.monitors = [dict(i) for i in user.monitor]
    user_list += users_info
    return generate_response(message="get info success", data=[dict(user) for user in user_list])

# 1. 返回用户信息的时候，添加监控项monitor -- prov，isp，bd
# 2. 时间格式转换成 -- “2022-08-19 12:00"

